package demo04_other

import Demo03_implicitContext._

case class Student(val name:String,val role:String="学生")
case class Older(val name:String,val role:String="老人")
case class SpecialPerson(val name:String,val role:String)

/**
 * 隐式转换
 *    函数类型
 *    如果当前参数的类型与所需的类型不符
 *    系统会在所有能找到的范围(当前类和通过import引入的类)查找 implicit 修饰的方法
 *    如果能找到把当前类转成所需类型的方法的话，直接自动调用
 *    按照规则调用与方法名无关,可以做符合条件的重载
 */
object Demo03_implicit_function {

  def buySpecialTicket(buyer:SpecialPerson) = {
    if(buyer!=null){
      println(s"${buyer.name}购买了一张${buyer.role}票")
    }
  }

  def main(args: Array[String]): Unit = {
    buySpecialTicket(Older("tom"))
  }

}
